<?php

namespace Lib\Util;


/**
 * Util 工具类 
 * 
 * 组合常用的方法以及常用的数据格式转换
 * 
 * @author: Xialj
 * @date: 2019-08-24
 * @version: v1.0
 * @email: m17269@163.com
 */
class Util
{


    /**
     * 返回一段JSON代码
     * 
     * @param $var 准备返回的数组或者字符串
     * @return json json格式的字符串
     */
    public static function send($var = null)
    {
        Util::ReturnJsonString($var);
    }



    // 以下为私有方法，提供给内部使用========================================================

    /**
     *  返回 json 对象 
     */
    private static function ReturnJsonString($jsonStringOrArray = null): ?String
    {
        global $CONFIG;
        header('Content-Type:application/json');  //此声明返回值为JSON类型的
        if (empty($jsonStringOrArray)) { 
            // 内容为空 则退出
            header($CONFIG['others']['protocol']['1.1']." 404 ".$CONFIG['others']['statusCode'][404]);
            exit(json_encode(Util::ShowJsonToArray($CONFIG['others']['code']['nullDataCode']), JSON_UNESCAPED_UNICODE));
        } elseif (is_array($jsonStringOrArray) || is_object($jsonStringOrArray)) {
            // 内容为数组或者对象
            header($CONFIG['others']['protocol']['1.1']." 200 ".$CONFIG['others']['statusCode'][200]);
            exit(json_encode($jsonStringOrArray, JSON_UNESCAPED_UNICODE));
        } elseif (is_string($jsonStringOrArray)) {
            // 内容为字符串
            header($CONFIG['others']['protocol']['1.1']." 200 ".$CONFIG['others']['statusCode'][200]);
            exit(json_encode($jsonStringOrArray, JSON_UNESCAPED_UNICODE));
        } else {
            // 内容不为上面出现的全部
            header($CONFIG['others']['protocol']['1.1']." 404 ".$CONFIG['others']['statusCode'][404]);
            exit(json_encode(Util::ShowJsonToArray($CONFIG['others']['code']['abnormalCode'], '数据异常，请检查'), JSON_UNESCAPED_UNICODE));
        }
    }

    /**
     * JSON 数组内容配对
     */
    private static function ShowJsonToArray($code, $msg = '未定义要传输的数据', $data = null): ?array
    {
        return ['code' => $code, 'msg' => $msg, 'data' => $data];
    }
}
